//: C21:CalcInventory.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// More use of for_each()
#include "Inventory.h"
#include "PrintSequence.h"
#include <vector>
#include <algorithm>
using namespace std;

// To calculate inventory totals:
class InvAccum
{
    int quantity;
    int value;
public:
    InvAccum() : quantity(0), value(0) {}
    void operator()(const Inventory& inv) {
        quantity += inv.getQuantity();
        value += inv.getQuantity() * inv.getValue();
    }
    friend ostream&
    operator<<(ostream& os, const InvAccum& ia) {
        return os << "total quantity: "
               << ia.quantity
               << ", total value: " << ia.value;
    }
};

int main()
{
    vector<Inventory> vi;
    generate_n(back_inserter(vi), 15, InvenGen());
    print(vi, "vi");
    InvAccum ia = for_each(vi.begin(),vi.end(),
                           InvAccum());
    cout << ia << endl;
} ///:~
